#include "uartemu.h"
#include "bspdef.h"

void DELAY_US(int us)
{ 
    uint16_t ts = TIM1_GetCounter();
    while (1)
    {
        uint16_t te = TIM1_GetCounter();
        if(te > ts)
        {
            if((te - ts) >= us)
                break;
        }
        else if(te < ts){
            if((1000 - ts + te) >= us)
                break; 
        }
    }
}

//内部晶振有误差
#define UART_DELAY() DELAY_US(91)  //104 - > 116  93
    
void UartEmuSendByte(uint8_t b)
{
    int i = 0;
    
    GPIO_WriteLow(UART_EMU_PORT, UART_EMU_PIN);
    UART_DELAY();
    for(i = 0; i < 8; i++)
    {
        if((b & 0x01) == 0x01)
        {
            GPIO_WriteHigh(UART_EMU_PORT, UART_EMU_PIN);
        }
        else 
        {
            GPIO_WriteLow(UART_EMU_PORT, UART_EMU_PIN);
        }

        b >>= 1;
        UART_DELAY();
    }
    
    GPIO_WriteHigh(UART_EMU_PORT, UART_EMU_PIN);
    UART_DELAY();
    UART_DELAY();
}